package com.fau.wm.service;

import java.io.File;
import java.util.List;
import java.util.Map;

import org.apache.poi.ss.usermodel.Workbook;

import com.fau.wm.entity.MedicalAdmin;
import com.fau.wm.entity.MedicalInventory;
import com.fau.wm.entity.MedicalInventoryDetail;
import com.fau.wm.util.Page;

/**
 * @desc 库存盘点接口
 * @author kangyj
 * @datetime 2014年8月15日,下午6:01:38
 */
public interface IInventoryManagerService {
	
	/**
	 * @desc 分页查询库存盘点
	 * @param inventory
	 * @param map
	 * @return
	 * @author kangyj
	 * @datetime 2014年8月15日,下午6:01:33
	 */
	public Page findInventoryByPage(MedicalInventory inventory, Map<String, Object> map);
	
	/**
	 * @desc 保存库存盘点基本信息
	 * @param Inventory
	 * @author kangyj
	 * @datetime 2014年8月15日,下午6:08:08
	 */
	public boolean saveInventory(MedicalInventory inventory, MedicalAdmin admin);
	
	/**
	 * @desc 验证输入的编号是否已存在 
	 * @param serialNum
	 * @return
	 * @author suny
	 * @datetime 2014年9月4日,下午3:10:26
	 */
	public Boolean verSerialNum(String serialNum,String hospitalId);
	
	/**
	 * @desc 保存修改 库存盘点基本信息
	 * @param inventory
	 * @author kangyj
	 * @datetime 2014年8月15日,下午6:09:23
	 */
	public void saveEdit(MedicalInventory inventory);
	
	/**
	 * @desc 删除库存盘点
	 * @param inventory
	 * @author kangyj
	 * @datetime 2014年8月16日,上午11:25:15
	 */
	public void delInventory(MedicalInventory inventory);
	
	/**
	 * @desc 查询盘点记录详细
	 * @return
	 * @author kangyj
	 * @datetime 2014年8月16日,下午3:19:09
	 */
	public List<MedicalInventoryDetail> findInventoryDetailList(String inventoryId);
	
	/**
	 * @desc 查询药品历史盘点记录
	 * @return Page
	 * @author liy
	 * @datetime 2014年12月23日,上午10:24:40
	 */
	public Page findMedicineHistoryInventory(Map<String, Object> map,String mid);
	
	/**
	 * @desc 保存盘点记录详细
	 * @param inventoryDetail
	 * @author kangyj
	 * @return 
	 * @datetime 2014年8月16日,下午3:20:05
	 */
	public boolean saveInventoryDetail(MedicalInventoryDetail inventoryDetail);
	
	/**
	 * @desc 保存修改盘点记录详细
	 * @param inventoryDetail
	 * @author kangyj
	 * @datetime 2014年8月16日,下午3:21:26
	 */
	public void saveEditInventoryDetail(MedicalInventoryDetail inventoryDetail);
	
	/**
	 * @desc 删除盘点记录详细
	 * @param inventoryDetail
	 * @author kangyj
	 * @datetime 2014年8月16日,下午3:24:09
	 */
	public void delInventoryDetail(MedicalInventoryDetail inventoryDetail); 
	
	/**
	 * @desc 检查将添加的药品是否存在
	 * @param inventoryId
	 * @param medicineId
	 * @return
	 * @author kangyj
	 * @datetime 2014年8月18日,上午11:00:16
	 */
	public Boolean checkMedicineExist(String inventoryId, String medicineId);
	
	/**
	 * @desc 分页查询盘点审核单
	 * @param inventory
	 * @param map
	 * @return
	 * @author kangyj
	 * @datetime 2014年8月20日,上午12:02:10
	 */
	public Page findInventoryAuditByPage(MedicalInventory inventory, Map<String, Object> map);
	
	/**
	 * @desc 更新审核人
	 * @param auditUser
	 * @param inventoryId
	 * @author kangyj
	 * @datetime 2014年8月20日,上午1:41:47
	 */
	public void updateAuditUser(MedicalAdmin auditUser, String inventoryId);
	
	/**
	 * @desc 更改盘点状态
	 * @param status
	 * @param inventoryId
	 * @author kangyj
	 * @datetime 2014年8月20日,上午1:48:20
	 */
	public void updateinventoryStatus(String status, String inventoryId);
	
	/**
	 * @desc 导出当前仓库的盘点表
	 * @param admin当前用户
	 * @param wid 仓库ID
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2014年12月23日,下午6:00:42
	 */
	public Workbook exportExcelAll(MedicalAdmin admin,String wid) throws Exception;
	
	/**
	 * @desc 导入盘点表
	 * @param admin当前用户
	 * @param iid盘点表Id
	 * @param file导入的文件
	 * @throws Exception 
	 * @author liy
	 * @datetime 2014年12月23日,下午8:48:26
	 */
	public String importInventory(MedicalAdmin admin,String iid, File file) throws Exception;

	/**
	 * @desc 提交盘点审核
	 * @param sid 盘点表Id
	 * @author liy
	 * @datetime 2014年12月24日,上午11:27:43
	 */
	public boolean toAudit(String sid);
	
	/**
	 * @desc 添加盘点明细验证所选产品是否存在
	 * @param inventoryDetail
	 * @return
	 * @author kangyj
	 * @datetime 2015年3月11日,下午12:14:48
	 */
	public boolean validProExist(MedicalInventoryDetail inventoryDetail);
	
	/**
	 * @desc 完成盘点时验证产品是否存在
	 * @param inventoryDetail
	 * @return
	 * @author kangyj
	 * @datetime 2015年3月11日,下午2:01:44
	 */
	public String inventoryValidPro(MedicalInventoryDetail inventoryDetail);
}
